অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) একটি অত্যন্ত জনপ্রিয় লাইব্রেরি যা Java Collections Framework এর বাইরের উন্নত এবং কাস্টম ডেটা স্ট্রাকচার সরবরাহ করে। অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির নানা নতুন ফিচার এবং অটোমেশন সুবিধা ডেটা ম্যানিপুলেশন এবং সংগ্রহ প্রক্রিয়াকে আরও উন্নত এবং কার্যকরী করে তোলে।
এখানে, আমরা Commons Collections এর কিছু নতুন এবং উন্নত ফিচার নিয়ে আলোচনা করব, যা ডেভেলপারদের জন্য আরও শক্তিশালী এবং ব্যবহার উপযোগী করে তোলে।
১. Java 8 এবং পরবর্তী সংস্করণে নতুন ফিচার
Java 8 এবং পরবর্তী সংস্করণে অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি বেশ কিছু নতুন ফিচার এবং কার্যকারিতা যোগ করেছে, যা ফাংশনাল প্রোগ্রামিং ধারণাকে আরও শক্তিশালী এবং সাশ্রয়ী করে তোলে। এর মধ্যে Streams, Lambda Expressions, এবং Parallel Streams ব্যবহারের মাধ্যমে সিস্টেমের কর্মক্ষমতা বৃদ্ধি পাওয়া যায়।
উদাহরণ: Java 8 Streams with Apache Commons Collections
import org.apache.commons.collections4.ListUtils;
import java.util.List;
import java.util.ArrayList;
public class Java8FeaturesExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("cherry");
// Filter fruits that start with "a" using Java 8 Streams
fruits.stream()
.filter(fruit -> fruit.startsWith("a"))
.forEach(System.out::println); // Output: apple
}
}
এখানে, Java 8 Streams ব্যবহার করে filtering এবং forEach অপারেশন করা হয়েছে, যা সহজ এবং দ্রুত ডেটা প্রক্রিয়াকরণের জন্য সহায়ক।
২. TransformerChain
TransformerChain একটি নতুন ফিচার যা multiple transformers (একাধিক ট্রান্সফরমার) চেইনে একত্রিত করে, এবং ইনপুট মানের উপর একাধিক ট্রান্সফরমেশন প্রক্রিয়া সম্পাদন করে। এটি বিভিন্ন ধরনের ট্রান্সফরমেশন একসাথে প্রয়োগ করতে সাহায্য করে, যেমন একটি স্ট্রিংকে বড় অক্ষরে রূপান্তর করা এবং পরে একটি নির্দিষ্ট শব্দ যোগ করা।
উদাহরণ: TransformerChain ব্যবহার
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.TransformerChain;
import java.util.Arrays;
import java.util.List;
public class TransformerChainExample {
public static void main(String[] args) {
// Define two transformers
Transformer<String, String> toUpperCase = String::toUpperCase;
Transformer<String, String> addExclamation = input -> input + "!";
// Chain the transformers
Transformer<String, String> chain = new TransformerChain<>(Arrays.asList(toUpperCase, addExclamation));
// Apply the transformer chain
String result = chain.transform("hello");
System.out.println(result); // Output: "HELLO!"
}
}
এখানে, আমরা দুটি ট্রান্সফরমারকে চেইন করে ইনপুট মান "hello" কে প্রথমে বড় অক্ষরে এবং পরে একটি বিস্ময়সূচক চিহ্ন যোগ করেছি। এটি একটি বহুমুখী ট্রান্সফরমেশন অপারেশন।
৩. LazyList
LazyList একটি নতুন ফিচার যা ডেটা লেট-লোডিং এবং lazy evaluation এর ধারণা অনুসরণ করে। এটি তখনই ডেটা লোড করে যখন সেটি প্রয়োজন হয়, ফলে বড় ডেটা সেটের ক্ষেত্রে কর্মক্ষমতা উন্নত হয়। এটি আপনার প্রোগ্রামে মেমরি ব্যবহারের দক্ষতা বৃদ্ধি করতে সাহায্য করে।
উদাহরণ: LazyList ব্যবহার
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.list.LazyList;
import java.util.List;
import java.util.ArrayList;
public class LazyListExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("banana");
// Create a LazyList
List<String> lazyList = LazyList.lazyList(fruits, String::toUpperCase);
// Items are transformed only when accessed
System.out.println(lazyList.get(0)); // Output: APPLE (Lazy evaluation)
}
}
এখানে, LazyList ব্যবহার করে আমরা ডেটাকে লেট-লোড করছি, অর্থাৎ শুধুমাত্র যখন ডেটা অ্যাক্সেস করা হবে, তখনই তা প্রসেস করা হবে।
৪. MultiMap এবং MultiValueMap (Multiple Values for Single Key)
MultiMap এবং MultiValueMap হল নতুন এবং শক্তিশালী ফিচার যা একটি কী এর সাথে একাধিক মান (values) সংরক্ষণ করতে সক্ষম। এটি বিশেষভাবে উপকারী যখন একটি কী এর সাথে একাধিক সম্পর্ক থাকতে পারে, যেমন একটি ব্যক্তি একাধিক ফোন নম্বরের সাথে যুক্ত।
উদাহরণ: MultiMap ব্যবহার
import org.apache.commons.collections4.MultiMap;
import org.apache.commons.collections4.map.MultiValueMap;
import java.util.List;
public class MultiMapExample {
public static void main(String[] args) {
// Create a MultiMap
MultiMap<String, String> phoneBook = new MultiValueMap<>();
// Add multiple phone numbers for John
phoneBook.put("John", "123-456-7890");
phoneBook.put("John", "987-654-3210");
// Retrieve phone numbers for John
System.out.println("Phone numbers for John: " + phoneBook.get("John"));
}
}
এখানে, MultiValueMap ব্যবহার করা হয়েছে যেখানে John এর সাথে একাধিক ফোন নম্বর যুক্ত করা হয়েছে এবং তার সব নম্বর একসাথে প্রিন্ট করা হয়েছে।
৫. SortedBag (Sorted Data Structure)
SortedBag হল একটি নতুন ডেটা স্ট্রাকচার যা উপাদানগুলিকে একটি সঠিক ক্রমে সাজিয়ে রাখে। এটি ডেটাকে sorted (অথবা ক্রমসিদ্ধ) রাখতে সাহায্য করে, এবং TreeBag এর মতো কার্যকরী একাধিক রেপোজিটরি বা স্টোরেজের জন্য উপযুক্ত।
উদাহরণ: SortedBag ব্যবহার
import org.apache.commons.collections4.SortedBag;
import org.apache.commons.collections4.bag.TreeBag;
public class SortedBagExample {
public static void main(String[] args) {
// Create a SortedBag (automatically sorted)
SortedBag<String> sortedBag = new TreeBag<>();
// Add elements to the SortedBag
sortedBag.add("banana");
sortedBag.add("apple");
sortedBag.add("cherry");
// Print the sorted bag
System.out.println("Sorted Bag contents: " + sortedBag); // Output: [apple, banana, cherry]
}
}
এখানে, TreeBag ব্যবহার করে একটি SortedBag তৈরি করা হয়েছে যা উপাদানগুলোকে স্বয়ংক্রিয়ভাবে সাজানো রাখে।
৬. Predicated Collection (Shaped Collection Filtering)
Predicated Collection হল একটি নতুন ফিচার যা shaped filtering বা শর্তসাপেক্ষ কালেকশন তৈরির জন্য ব্যবহৃত হয়। এটি একটি প্রেডিকেট শর্তের মাধ্যমে ডেটাকে ফিল্টার করে, এবং শুধুমাত্র সেই উপাদানগুলো রাখে যা শর্তটি পূর্ণ করে।
উদাহরণ: Predicated Collection ব্যবহার
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class PredicatedCollectionExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("cherry");
// Create a predicate to filter fruits starting with "a"
Predicate<String> startsWithA = fruit -> fruit.startsWith("a");
// Efficient filtering using CollectionUtils
List<String> filteredFruits = (List<String>) CollectionUtils.select(fruits, startsWithA);
System.out.println("Filtered Fruits: " + filteredFruits); // Output: [apple]
}
}
এখানে, CollectionUtils.select() ব্যবহার করে Predicated Collection তৈরি করা হয়েছে, যেখানে একটি শর্তের মাধ্যমে উপাদানগুলো ফিল্টার করা হয়েছে।
সারাংশ
অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি বিভিন্ন নতুন ফিচার সরবরাহ করে যা Java ডেভেলপারদের ডেটা ম্যানিপুলেশন এবং কালেকশন পরিচালনা আরও সহজ এবং কার্যকরী করে তোলে। এর মধ্যে Java 8 Stream Integration, TransformerChain, LazyList, MultiMap, SortedBag, Predicated Collections এবং Custom Transformers অন্তর্ভুক্ত রয়েছে। এই ফিচারগুলির মাধ্যমে আপনি ডেটা সংগ্রহ এবং প্রক্রিয়া করার কার্যকারিতা দ্রুত এবং কার্যকরী করতে পারবেন।